#include <iostream>
#include <thread>
#include <mutex>

std::mutex mtx1;  // 第一个全局互斥量
std::mutex mtx2;  // 第二个全局互斥量
int data1 = 0;    // 第一个共享数据
int data2 = 0;    // 第二个共享数据

void worker(int id) {
    // 使用 std::scoped_lock 同时锁定两个互斥量
    std::scoped_lock lock(mtx1, mtx2);

    // 修改共享数据
    data1 += id;
    data2 -= id;
    std::cout << "Thread " << id << " modified data1 to " << data1 << " and data2 to " << data2 << std::endl;
    // 锁在 std::scoped_lock 对象析构时自动释放
}

int main() {
    std::thread t1(worker, 1);
    std::thread t2(worker, 2);

    t1.join();
    t2.join();

    std::cout << "Final values - data1: " << data1 << ", data2: " << data2 << std::endl;

    return 0;
}